const express = require('express')
const path = require('path')
const bodyParser = require('body-parser')
const router = require('./router')
const session = require('express-session')
const app = express()
const MongoDBStore = require('connect-mongodb-session')(session);
const env = require('./config.js')
//中间件,验证是否登录
let userAuth = require('./middlewares/userAuth.js')

//加载静态资源
app.use('/public/', express.static(path.join(__dirname, './public/')))
app.use('/lib/', express.static(path.join(__dirname, './lib/')))
app.use('/node_modules/', express.static(path.join(__dirname, './node_modules/')))

//配置模版   views 默认就是 views 目录 ,可以不用写,这里写了,方便需要的时候更改
app.engine('html', require('express-art-template'))
app.set('views', path.join(__dirname, './views/'))

require('art-template').defaults.imports.dateFormat = function(date){
    date.toISOString().substr(0,10)
}

//配置解析表单post请求体插件 ,一定要在 router 之前 
app.use(bodyParser.urlencoded({extended: false}))
app.use(bodyParser.json())

//数据库存session
let store = new MongoDBStore({
    uri: env.mLap,
    collection: 'mySessions'
  })
  store.on('error', function(error) {
    assert.ifError(error);
    assert.ok(false);
  })

//express默认不支持session 和 cookie
//需要 express-session 来解决
app.use(session({
    secret:'dafdiyjdfa',   //配置加密字符串,它会在原有加密基础上和这个字符串拼起来去加密,防止客户端伪造,增加安全性
    resave: false,
    store: store,
    saveUninitialized: true  //无论你是不使用session,默认直接
}))

//账号,注册,登录,退出
app.use(require('./routes/account.js'))

//验证用户是否登录
app.use('/user',userAuth)

//用户更改更,账号信息,设置密布...
app.use(require('./routes/user.js'))

//topics
app.use(require('./routes/topic.js'))


//把路由挂载到 app 中
// app.use(router)

//配置一个处理 404 的中间件
app.use((req, res)=>{
    res.render('404.html')
})

//配置一个全局错误处理中间件,一定要四个参数
app.use((err, req, res, next)=>{
    res.status(500).json({
        error_code: 500,
        message: err.message
    })
})

const port = process.env.PORT || 5000

app.listen(port, ()=>{
    console.log(`running ${port}...`)
})